home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1997 / MacHack 1997.toast / Hacks / Hacks ’93 / Johan / hm.c < prev    next >
C/C++ Source or Header  |  1993-06-17  |  2KB  |  136 lines

  1. #define MAIN
  2. #include "hm.h"
  3.  
  4.  
  5. void            doMenu(long menuAndItem);
  6. void            doKey(void);
  7. void            doMouse(void);
  8. void            doAbout(void);
  9.  
  10.  
  11. void doAbout(void)
  12. {
  13.     DialogPtr dlog = GetNewDialog(DLOG_About, 0, (DialogPtr)-1);
  14.     short itemHit;
  15.     
  16.     do {
  17.         ModalDialog(0, &itemHit);
  18.     } while (itemHit == ok);
  19.     
  20.     DisposeDialog(dlog);
  21. }
  22.  
  23.  
  24. void doMenu(long menuAndItem)
  25. {
  26.     switch (HiWord(menuAndItem)) {
  27.     case MENU_Apple:
  28.         switch (LoWord(menuAndItem)) {
  29.         case item_about:
  30.             doAbout();
  31.             break;
  32.         }
  33.         break;
  34.         
  35.     case MENU_File:
  36.         switch (LoWord(menuAndItem)) {
  37.         case item_quit:
  38.             done = true;
  39.             break;
  40.         }
  41.         break;
  42.     }
  43.     HiliteMenu(0);
  44. }
  45.  
  46.  
  47. void doKey(void)
  48. {
  49.     if (theEvent.modifiers & cmdKey) {
  50.         doMenu(MenuKey(0xFF & theEvent.message));
  51.     }
  52. }
  53.  
  54.  
  55. void doMouse(void)
  56. {
  57.     WindowPtr wind;
  58.     long newSize;
  59.     long menuAndItem;
  60.     short what;
  61.     
  62.     
  63.     switch (what = FindWindow(theEvent.where ,&wind)) {
  64.     case inContent:
  65.     case inDrag:
  66.     case inGrow:
  67.     case inGoAway:
  68.     case inZoomIn:
  69.     case inZoomOut:
  70.         if (wind != FrontWindow()) {
  71.             BringToFront(wind);
  72.             return;    
  73.         }
  74.     }
  75.     
  76.     switch (what) {
  77.     case inMenuBar:
  78.         doMenu(MenuSelect(theEvent.where));
  79.         break;
  80.         
  81.     case inContent:
  82.         GlobalToLocal(&theEvent.where);
  83.         doMazeClick(theEvent.where, theEvent.modifiers);
  84.         break;
  85.         
  86.     case inDrag:
  87.         SetPort(wind);
  88.         DragWindow(wind, theEvent.where, &dragBounds);
  89.         break;
  90.         
  91.     case inGrow:
  92.         SetPort(wind);
  93.         newSize = GrowWindow(wind, theEvent.where, &sizeBounds);
  94.         if (newSize) {
  95.             SizeWindow(wind, LoWord(newSize), HiWord(newSize), false);
  96.             InvalRect(&wind->portRect);
  97.         }
  98.         break;
  99.         
  100.     case inDesk:
  101.     case inSysWindow:
  102.     case inGoAway:
  103.     case inZoomIn:
  104.     case inZoomOut:
  105.         break;
  106.     }
  107. }
  108.  
  109.  
  110. void main(void)
  111. {
  112.     init();
  113.     while (!done) {
  114.         if (WaitNextEvent(-1, &theEvent, 0, 0)) {
  115.             switch (theEvent.what) {
  116.             case mouseDown:
  117.                 doMouse();
  118.                 break;
  119.                 
  120.             case autoKey:
  121.             case keyDown:
  122.                 doKey();
  123.                 break;
  124.                 
  125.             case updateEvt:
  126.                 SetPort((WindowPtr)theEvent.message);
  127.                 BeginUpdate((WindowPtr)theEvent.message);
  128.                 if ((WindowPtr)theEvent.message == mazeWindow) {
  129.                     doMazeDraw();
  130.                 }
  131.                 EndUpdate((WindowPtr)theEvent.message);
  132.                 break;
  133.             }
  134.         }
  135.     }
  136. }